import $ from '@/common'

const Time = {
  now() {
    return Date.parse(new Date())
  },
  // 时间戳转为文字
  toTime(t) {
    if (!t) return null
    if (typeof t === 'string') {
      t = parseInt(t)
    }
    return Time.format(new Date(t), 'yyyy-MM-dd hh:mm:ss')
  },
  toDate(t) {
    if (typeof t === 'string') {
      t = parseInt(t)
    }
    return Time.format(new Date(t), 'yyyy-MM-dd')
  },
  // 支持整数，Date，时间字符串三种格式转为时间戳
  toTs(t) {
    return new Date(t).getTime()
  },
  format(t, fmt) {
    if (!t || t.toString() === 'Invalid Date') {
      return ''
    }
    var o = {
      'M+': t.getMonth() + 1, // 月份
      'd+': t.getDate(), // 日
      'h+': t.getHours(), // 小时
      'm+': t.getMinutes(), // 分
      's+': t.getSeconds(), // 秒
      'q+': Math.floor((t.getMonth() + 3) / 3), // 季度
      'S': t.getMilliseconds() // 毫秒
    }
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (t.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (var k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
      }
    }
    return fmt
  },
  preMonth(date = new Date()) {
    date.setMonth(date.getMonth() - 1)
    var y = date.getFullYear()
    var m = date.getMonth() + 1
    var d = date.getDate()
    if (d < 10) {
      d = '0' + d
    }
    return y + '-' + m + '-' + d
  },
  intervalConfig: [{
    max: 60,
    divisor: 1,
    text: '${n}秒前',
    toText: '相距约${n}秒'
  },{
    max: 60 * 60,
    divisor: 60,
    text: '${n}分钟前',
    toText: '相距约${n}分钟'
  },{
    max: 60 * 60 * 24,
    divisor:  60 * 60,
    text: '${n}小时前',
    toText: '相距约${n}小时'
  },{
    max: 60 * 60 * 24 * 7,
    divisor: 60 * 60 * 24,
    text: '${n}天前',
    toText: '相距约${n}天'
  },{
    max: 60 * 60 * 24 * 7 * 30,
    divisor: 60 * 60 * 24 * 7,
    text: '${n}周前',
    toText: '相距约${n}周'
  },{
    max: 60 * 60 * 24 * 356,
    divisor: 60 * 60 * 24 * 30,
    text: '${n}月前',
    toText: '相距约${n}月'
  },{
    max: 60 * 60 * 24 * 356 * 999,
    divisor: 60 * 60 * 24 * 356,
    text: '${n}年前',
    toText: '相距约${n}年'
  }],
  // 只有一个参数from时，返回from距今还有多久
  // 有两个参数from，to时，返回from和to之间相隔多久
  getTimeInterval(from, to) {
    let fromTs = Time.toTs(from)
    let seconds, textType, index, config, n
    if (to) {
      let toTs = Time.toTs(to)
      seconds = (fromTs - toTs) / 1000
      textType = 'toText'
    } else {
      seconds = (Time.now() - fromTs) / 1000
      textType = 'text'
    }
    index = Time.intervalConfig.findIndex(item => {
      return item.max > seconds
    })
    config = Time.intervalConfig[index]
    n = Math.floor(seconds / config.divisor)
    return $.composeValue(config[textType], {n})
  }
}

export default Time
